package com.draven;

import com.draven.builder.Student;
import com.draven.builder.StudentBuild;

/**
 * 1、介绍：
 *      建造者模式的定义是：将一个复杂对象的构造与它的表示分离，使同样的构建过程可以创建不同的表示，这样的设计模式被称为建造者模式。
 * 2、建造者模式的角色定义:
 * 一个构建者模式包含以下几个类：
 * 导演类（Director）：按照一定的顺序或者一定的需求去组装一个产品。
 * 构造者类（builder+ConcreteBuilder）：提供对产品的不同个性化定制，最终创建出产品。
 * 其实他是：build接口+ConcreteBuilder接口实现类。正规的是先有一个接口builder，然后真正的构建是在实现类ConcreteBuilder中构建的。
 * 产品类（Product）：最终的产品
 * 3、工厂模式和构建者模式区别：
 * 工厂模式构建出来的对象，其对象的属性都是一致的，即对象都是一样的。
 * 构建者模式可以根基你的要求定制不同属性的对象。
 * 4、为什么使用构建者模式？什么场景使用构建者模式？：
 * 在mybatis框架中，对于构建者模式使用的比较频繁。
 * 假如我们需要一个对象，一个对象的创建非常的复杂，对象中还要对象的封装，那么我们就可以使用构建者模式，将该对象的构建交给它来处理，我们使用的时候找他要一个对象就可以了。
 * 我想要一个对象，工厂模式就会创建一个对象，该对象的属性是固定的几个；而构建者模式可以通过导演类，组合不同的属性或者成员，可以构建出不同的对象。
 * 设计模式在实际的使用中使可以变化的，并不是固定的格式

 */
public class TestBuilder {
    public static void main(String[] args) {
        StudentBuild build = new StudentBuild();
        // 决定如何创建一个Student
        //构建产品一：
        Student student1 = build.age(1).name("张三").father("张老大").build();
        //构建产品二：
        Student student2 = build.age(1).name("李四").build();
        System.out.println(student1);
        System.out.println(student2);

    }
}
